package Controler.Cours;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import Model.Cours;
import Model.Eleve;
import Model.Listes;
import Model.Matiere;
import Model.Niveau;
import Model.Professeur;
import Model.Stage;
import JDBC.AfficherMatiere;
import JDBC.AfficherNiveau;
import JDBC.Cours_Afficher;
import JDBC.Cours_Supprimer;
import JDBC.Eleve_Afficher;
import JDBC.Professeur_Afficher;
import JDBC.Stage_Afficher;

/**
 * Servlet implementation class AffichageCours
 */
@WebServlet("/Cours_ChoixAfficherController")
public class Cours_ChoixAfficherController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Cours_ChoixAfficherController() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		HttpSession session = request.getSession();
		Listes listes = (Listes) session.getAttribute("listes");
		
		if (listes==null)
		{
			listes = new Listes();
		}
		
		Cours_Afficher listeCours = new Cours_Afficher();
		ArrayList<Cours> mesCours = listeCours.afficherCours();
		listes.setMesCours(mesCours);
		session.setAttribute("listes", listes);
		request.getRequestDispatcher("Vues/VuesGrp3/vueGRP3_AfficheCours.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		String url = "vueGRP3_CoursVue.jsp";
		
		HttpSession session = request.getSession();
		Listes listes = (Listes) session.getAttribute("listes");
		
		if (listes==null)
		{
			listes = new Listes();
		}
		
		AfficherMatiere listeMatieres = new AfficherMatiere();
		ArrayList<Matiere> mesMatieres = listeMatieres.afficherMatiere();
		listes.setMesMatieres(mesMatieres);
		
		AfficherNiveau listeNiveaux = new AfficherNiveau();
		ArrayList<Niveau> mesNiveaux = listeNiveaux.afficherNiveau();
		listes.setMesNiveaux(mesNiveaux);
		
		Eleve_Afficher listeEleves = new Eleve_Afficher();
		ArrayList<Eleve> mesEleves = listeEleves.afficher();
		listes.setMesEleves(mesEleves);
		
		Professeur_Afficher listeProfs = new Professeur_Afficher();
		ArrayList<Professeur> mesProfs = listeProfs.afficher();
		listes.setMesProfesseurs(mesProfs);
		
		if(request.getParameter("idAsc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCours("id_cours","ASC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("idDesc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCours("id_cours","DESC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("dateAsc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCours("date_cours","ASC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("dateDesc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCours("date_cours","DESC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("dureeAsc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCours("duree_cours","ASC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("dureeDesc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCours("duree_cours","DESC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("hdAsc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCours("heure_debut","ASC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("hdDesc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCours("heure_debut","DESC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("hfAsc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCours("heure_fin","ASC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("hfDesc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCours("heure_fin","DESC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("idLieuAsc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCoursParVille("ASC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("idLieuDesc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCoursParVille("DESC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("profAsc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCoursParProf("ASC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("profDesc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCoursParProf("DESC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("matAsc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCoursParMatiere("ASC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("matDesc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCoursParMatiere("DESC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("nivAsc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCoursParNiveau("ASC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("nivDesc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCoursParNiveau("DESC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("eleveAsc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCoursParEleve("ASC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("eleveDesc")!=null)
		{
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCoursParEleve("DESC");
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("ajout")!=null)
		{
			url="Vues/VuesGrp3/vueGRP3_CreationCours.jsp";
		}

		ArrayList<String> ListeID = new ArrayList<String>();
		String all = request.getParameter("nbCours");
		int nbCours=0;
		if(all!=null)
		{
			nbCours = Integer.parseInt(all);
		}
		boolean modifier = false;
		
		String coursModifier=null;
		String idCours=null;
		
		if(request.getParameter("suppression")==null)
		{
			for (int i = 0; i < nbCours; i++) 
			{
				String bouton = request.getParameter(String.valueOf(i));
				if(bouton!=null)
				{
					coursModifier=bouton;
					modifier=true;
				}
			}
			
			if(modifier)
			{
				if(coursModifier.length()==12)
				{
					idCours=coursModifier.substring(11, 12);
				}
				if(coursModifier.length()==13)
				{
					idCours=coursModifier.substring(11, 13);
				}
				if(coursModifier.length()==14)
				{
					idCours=coursModifier.substring(11, 14);
				}
				if(coursModifier.length()==15)
				{
					idCours=coursModifier.substring(11, 15);
				}
		
				Cours_Afficher cours = new Cours_Afficher();
				Cours c = cours.afficherCours(Integer.parseInt(idCours));
				listes.setCours(c);
				listes.setIdModifie(Integer.parseInt(idCours));
				session.setAttribute("listes", listes);
				url="Vues/VuesGrp3/vueGRP3_ModificationCours.jsp";
			}
		}
		if(request.getParameter("suppression")!=null)
		{
			for (int i = 0; i < nbCours; i++) 
			{
				String checkbox = request.getParameter(String.valueOf(i));
				if(checkbox!=null)
				{
					ListeID.add(checkbox);
				}
			}
			
			Cours_Supprimer suppression = new Cours_Supprimer();
			suppression.supprimer(ListeID);
			Cours_Afficher listeCours = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeCours.afficherCours();
			listes.setMesCours(mesCours);
			session.setAttribute("listes", listes);
			url="Vues/VuesGrp3/vueGRP3_AfficheCours.jsp";
		}
		if(request.getParameter("affichage")!=null)
		{
			Cours c = new Cours();
			int idCours2=0;
			
			Cours_Afficher listeStages = new Cours_Afficher();
			ArrayList<Cours> mesCours = listeStages.afficherCours();
			
			for (int i=0;i<mesCours.size();i++)
			{
				Cours cours;
				if (mesCours.get(i).getIdCours()==Integer.parseInt(request.getParameter("affichage")))
				{
					cours=mesCours.get(i);
					idCours2=cours.getIdCours();
				}
			}
			
			c = listeStages.afficherCours(idCours2);
			
			session.setAttribute("cours", c);
			url="Vues/VuesGrp3/vueGRP3_afficheCoursDetail.jsp";
		
		}
		
		
		request.getRequestDispatcher(url).forward(request, response);
	}
}
